/* Teach Tool  - Structural Dynamics
 * Copyright (C) 2009: Fabian Gerold, www.fabiangerold.de
 *
 * This file may be licensed under the terms of of the
 * GNU General Public License Version 3 (the "GPL").
 * 
 * Software distributed under the License is distributed 
 * on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either 
 * express or implied. See the GPL for the specific language 
 * governing rights and limitations.
 *
 * You should have received a copy of the GPL along with this 
 * program. If not, go to http://www.gnu.org/licenses/gpl.html
 * or write to the Free Software Foundation, Inc., 
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

#ifndef TEACHTOOLS_System_H
#define TEACHTOOLS_System_H

#include <QtGui>

class System : public QObject
{
   Q_OBJECT

public:
	System();
	virtual void reset() {};
	virtual bool isStopped() {return true;}
	virtual void proceed() {}
	virtual float addScale( float ) { return 0.f; }
	
signals:
	void signalUpdateParameter( double, double, double, double );
	void signalStart();
	void signalUpdateTime( double );
	void signalClearOutput();
	void signalAppendOutput( const QString& );
	void signalClearPoints();
	void signalResetDisp();

	void signalDiagSetMax( float, float, float );
	void signalDiagUpdate();
	void signalDiagAddPoint(  float, float, float, float  );
	void signalDiagSetScale( float );

	void signalSetDisp( double, double );
	void signalSetDragDisp( double );
	void signalSetSpring( double );
	void signalSetMass( double );
	void signalSetDamp( double );

	void signalSetForce( double );
	void signalSetForceVisible( bool );
	void signalSetExcitation( QPainterPath* path, int mode );

public slots:
	virtual void slotStart( double amp = 0 ) = 0;
	virtual void slotStop() = 0;
	virtual void slotFrame() = 0;
	virtual void slotSetDragDisp( double disp ) = 0;

};

#endif
